﻿// <copyright file="ITask.cs">
// Copyright (c) Chad Weimer
// </copyright>
// <author>Chad Weimer</author>
// <summary>
// This file is part of Tasx.
//
// Tasx is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Tasx is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Tasx.  If not, see http://www.gnu.org/licenses/.
// </summary>

using System;
using System.Collections.Generic;

namespace Tasx.Definitions
{
	/// <summary>
	/// Defines a task.
	/// </summary>
	public interface ITask : ITaskProvided
	{
		/// <summary>
		/// Gets or sets the summary of the task.
		/// </summary>
		string Summary { get; set; }
		
		/// <summary>
		/// Gets or sets additional notes on the task.
		/// </summary>
		string Notes { get; set; }
		
		/// <summary>
		/// Gets or sets the due date of the task, if any.
		/// </summary>
		DateTime? DueDate { get; set; }
		
		/// <summary>
		/// Gets or sets when the reminder, if any, should occur relative to the due date.
		/// </summary>
		TimeSpan? Reminder { get; set; }
		
		/// <summary>
		/// Gets or sets the <see cref="TaskPriority"/> of the task.
		/// </summary>
		TaskPriority Priority { get; set; }
		
		/// <summary>
		/// Gets or sets whether the task has been completed.
		/// </summary>
		bool Completed { get; set; }
		
		/// <summary>
		/// Gets the child tasks of the task.
		/// </summary>
		IEnumerable<ITask> Tasks { get; }
	}
}
